#ifndef __PILA_H__
#define __PILA_H__

#include "Lista.h"


template<class T> class Pila{

private:

	Lista<T> elementos;

public:

	/**
	 * Postcondiciones: El elemento queda agregado en la sima de la pila.
	 */
	void push(T elemento){
		IteradorLista<T> iterador = this->elementos.iterador();
		iterador.primero();
		iterador.insertar(elemento);
	}

	/**
	 * Precondiciones: La lista no debe estar vacia.
	 * Postcondiciones: El elemento queda removido de la sima de la pila y
	 *                  se lo retorna.
	 */
	T pop(){
		IteradorLista<T> iterador = this->elementos.iterador();
		iterador.primero();
		return iterador.remover();
	}

	/**
	 * Poscondiciones: Retorna true si la pila esta vacia, false en caso
	 *                 contrario.
	 */
	bool estaVacia(){
		return this->elementos.estaVacia();
	}


	/**
	 * Postcondiciones: Retorna el numero de elementos que contiene la pila.
	 */
	int tamanio(){
		return this->elementos.tamanio();
	}
};

#endif /* __PILA_H__ */
